package br.com.imob.dao;

import br.com.imob.modelo.AcompanhamentoJuridico;

import java.util.List;

/** @user Gilton Nascimento
 *  @since 11:48:49 02/02/2011 2011
 *  @version 
 */

public class AcompanhamentoJuridicoDao extends GenericDao {

	public AcompanhamentoJuridicoDao() {  }
	
	public Integer adicionarAcJuridico(AcompanhamentoJuridico acjuridico) {
		saveOrUpdatePojo(acjuridico);
		return acjuridico.getAcjuridicoId();
	}
	
	public void removerAcJuridico(AcompanhamentoJuridico acjuridico) {
		removerPojo(acjuridico);
	}

	/* Precisa definir o ID */
	public void atualizarAcJuridico(AcompanhamentoJuridico recupera) {
		saveOrUpdatePojo(recupera);
	}
	
	/**
	 * Editar um AcJuridico
	 * @param String oldAcJuridico
	 * @param String newAcJuridico
	 */
	public void atualizarAcJuridico(String tpStr, String oldAcJuridico, String newAcJuridico ) {
		if( "data".equalsIgnoreCase(tpStr) ) {
			if ( ( !"".equalsIgnoreCase(oldAcJuridico) && oldAcJuridico != null )
					&& ( !"".equalsIgnoreCase(newAcJuridico) && newAcJuridico != null ) ) 
				atualizarAcJuridico( getAcJuridicoQNamedData(oldAcJuridico), new AcompanhamentoJuridico(tpStr, newAcJuridico) );
		}
		
		if( "descricao".equalsIgnoreCase(tpStr) ) {
			if ( ( !"".equalsIgnoreCase(oldAcJuridico) && oldAcJuridico != null )
					&& ( !"".equalsIgnoreCase(newAcJuridico) && newAcJuridico != null ) ) 
				atualizarAcJuridico( getAcJuridicoQNamedDesc(oldAcJuridico), new AcompanhamentoJuridico(tpStr, newAcJuridico) );
		}
		if( "referencia".equalsIgnoreCase(tpStr) ) {
			if ( ( !"".equalsIgnoreCase(oldAcJuridico) && oldAcJuridico != null )
					&& ( !"".equalsIgnoreCase(newAcJuridico) && newAcJuridico != null ) ) 
				atualizarAcJuridico( getAcJuridicoQNamedReferenciaImovel(oldAcJuridico), new AcompanhamentoJuridico(tpStr, newAcJuridico) );
		}
		if( "status".equalsIgnoreCase(tpStr) ) {
			if ( ( !"".equalsIgnoreCase(oldAcJuridico) && oldAcJuridico != null )
					&& ( !"".equalsIgnoreCase(newAcJuridico) && newAcJuridico != null ) ) 
				atualizarAcJuridico( getAcJuridicoQNamedStatus(oldAcJuridico), new AcompanhamentoJuridico(tpStr, newAcJuridico) );
		}
	}

	
	
	/* Precisa definir qual atribuito sera a chave a identificar 
	 * a tupla a ser alterada */
	public void atualizarAcJuridico(AcompanhamentoJuridico recuperar, AcompanhamentoJuridico alterar) {
		recuperar = retriveAcJuridico(recuperar);
		
		if(alterar.getAcjDescricao() != null)
			recuperar.setAcjDescricao(alterar.getAcjDescricao());
		if(alterar.getAcjDataAcompanhamento() != null)
			recuperar.setAcjDataAcompanhamento(alterar.getAcjDataAcompanhamento());
		if(alterar.getAcjReferenciaImovel() != null)
			recuperar.setAcjReferenciaImovel(alterar.getAcjReferenciaImovel());
		if(alterar.getAcjStatus() != null)
			recuperar.setAcjStatus(alterar.getAcjStatus());
		
		saveOrUpdatePojo(recuperar);
	}
	
//	Artificio para Recuperar a Tupla de AcompanhamentoJuridico
	protected AcompanhamentoJuridico retriveAcJuridico(AcompanhamentoJuridico recuperar) {
		if(recuperar.getAcjuridicoId() != null)
			return getAcJuridico(recuperar.getAcjuridicoId());
		if(recuperar.getAcjDescricao() != null)
			return getAcJuridicoQNamedDesc(recuperar.getAcjDescricao());
		if(recuperar.getAcjDataAcompanhamento() != null)
			return getAcJuridicoQNamedData(recuperar.getAcjDataAcompanhamento());
		if(recuperar.getAcjReferenciaImovel() != null)
			return getAcJuridicoQNamedReferenciaImovel(recuperar.getAcjReferenciaImovel());
		if(recuperar.getAcjStatus() != null)
			return getAcJuridicoQNamedStatus(recuperar.getAcjStatus());
		
		return recuperar;
	}
	
	
//	Consultas
	public AcompanhamentoJuridico getAcJuridico(Integer key) {
		return getPojoByID(AcompanhamentoJuridico.class, key);
	}
	public AcompanhamentoJuridico getAcJuridicoByQuery(String query, Object...params) {
		return getPojoByQry(query, params);
	}
	public AcompanhamentoJuridico getAcJuridicoQNamedDesc(String fltrDesc) {
		return getPojoByQNamed("AcompanhamentoJuridico.findByAcjDescricao", fltrDesc);
	}
	public AcompanhamentoJuridico getAcJuridicoQNamedData(String fltrData) {
		return getPojoByQNamed("AcompanhamentoJuridico.findByAcjDataAcompanhamento", fltrData);
	}
	public AcompanhamentoJuridico getAcJuridicoQNamedReferenciaImovel(String fltrRefer) {
		return getPojoByQNamed("AcompanhamentoJuridico.findByAcjReferenciaImovel", fltrRefer);
	}
	public AcompanhamentoJuridico getAcJuridicoQNamedStatus(String fltrAcjStatus) {
		return getPojoByQNamed("AcompanhamentoJuridico.findByAcjStatus", fltrAcjStatus);
	}
	
	public List<AcompanhamentoJuridico> getAcJuridicos() {
		return (List<AcompanhamentoJuridico>) getALL(AcompanhamentoJuridico.class);
	}
	public List<AcompanhamentoJuridico> getAcJuridicosQNamedDescPRX(String fltrDesc) {
		return getListByQNamedPRX("AcompanhamentoJuridico.findLikeByAcjDescricao", fltrDesc);
	}
	public List<AcompanhamentoJuridico> getAcJuridicosQNamedDataPRX(String fltrData) {
		return getListByQNamedPRX("AcompanhamentoJuridico.findLikeByAcjDataAcompanhamento", fltrData);
	}
	public List<AcompanhamentoJuridico> getAcJuridicosQNamedReferenciaImovelPRX(String fltrAcjReferenciaImovel) {
		return getListByQNamedPRX("AcompanhamentoJuridico.findLikeByAcjReferenciaImovel", fltrAcjReferenciaImovel);
	}
	public List<AcompanhamentoJuridico> getAcJuridicosQNamedStatusPRX(String fltrAcjStatus) {
		return getListByQNamedPRX("AcompanhamentoJuridico.findLikeByAcjStatus", fltrAcjStatus);
	}
	public List<AcompanhamentoJuridico> getAcJuridicosByQuery(String query, Object...params) {
		return getListByQry(query, params);
	}
	
}